package server.business.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import server.business.pojo.BloodInformation;
import com.baomidou.mybatisplus.extension.service.IService;
import server.business.vo.Result;
import server.business.vo.ResultExpand;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

/**
 * @author Galaxy
 * @description 针对表【blood_information】的数据库操作Service
 * @createDate 2022-11-08 12:46:23
 */
public interface BloodInformationService extends IService<BloodInformation> {

    /**
     * fzx
     *
     * @param BloodId
     * @return
     */
    HashMap<String, Object> getFrom(String BloodId);

    IPage<BloodInformation> selectByPage(int currentPage, int limit);

    List<BloodInformation> queryData();

    ResultExpand getPage(HttpServletRequest request, HttpServletResponse response);

    Result outboundBlood(HttpServletRequest request, HttpServletResponse response);
    // Result outboundBlood(@RequestBody(required = false)BloodInformation
    // bloodInformation, @RequestParam(name="operator") String operator,
    // @RequestParam(name="operatorNumber") String operatorNumber);
    /**
     * 更改血液信息
     * @param bloodInformation
     */
    void updateBloodInfo(BloodInformation bloodInformation);
    void downloadExcel(HttpServletRequest request, HttpServletResponse response);

    ResultExpand searchBloodInformation(HttpServletRequest request, HttpServletResponse response);

    // *************************************lrz*************************start

    /**
     * 返回所有血液信息
     *
     * @return
     */
    List<BloodInformation> getAll();

    /**
     * 分页查询
     *
     * @param currentPage
     * @param pageSize
     * @param bloodInformation
     * @return
     */
    IPage<BloodInformation> getPage(int currentPage, int pageSize, BloodInformation bloodInformation);

    /**
     * 根据输血申请单信息获取在库的血液信息
     *
     * @param
     * @return
     */
    List<BloodInformation> getBloodInStockByTransfusion(BloodInformation bloodInformation);

    /**
     * 根据血液编号更改血液状态
     *
     * @param bloodNumber
     * @param state
     */
    void setStateByBloodNumber(String bloodNumber, String state);

    /**
     * 根据血液id更改血液信息
     *
     * @param bloodInformation
     */
    void editDataByBloodNumber(BloodInformation bloodInformation);

    /**
     * 根据血液Id设置血液状态
     *
     * @param bloodId
     * @param
     */
    void setStateByBloodId(Long bloodId, String state);

    /**
     * 根据输血申请单信息获取在库的血液信息
     *
     * @param bloodInformation
     * @return
     */
    BloodInformation getSingleBloodInStockByTransfusion(BloodInformation bloodInformation);

    /**
     * 根据输血申请单信息获取在库的血液信息
     *
     * @param bloodInformation
     * @return
     */
    List<BloodInformation> reAssignSingleBloodInStockByTransfusion(BloodInformation bloodInformation);

    /**
     * 根据血液ID获取血液信息
     *
     * @param bloodInformation
     * @return
     */
    BloodInformation getBloodInfo(BloodInformation bloodInformation);

    /**
     * 根据血液Id设置血液状态
     *
     * @param bloodId
     * @param
     */
    void setStateByBloodId(String bloodId, String state);

    /**
     * 根据编号批量下载选中数据
     *
     * @param response
     * @param ids
     * @throws IOException
     */
    void batchDownload(HttpServletResponse response, ArrayList<Long> ids) throws IOException;
    // *************************************lrz*************************end

    // /**
    // * 导出血液信息表信息
    // *
    // * @param bloodInformation
    // * @return
    // */
    // List<BloodInformation> export();

    // *************************************zy*************************start

    /**
     * 血站在库血液信息查询模块
     *
     * @return 返回血站在库血液信息列表
     */
    List<BloodInformation> findStationBloodInformation();

    /**
     * 根据血液Id设置血液状态
     *
     * @param bloodNumber 血液Id
     * @param condition   待设置的血液状态
     */
    void setConditionByBloodNumber(String bloodNumber, String condition);

    /**
     * 根据编号批量下载选中数据
     *
     * @param response 请求
     * @param ids      编号列表
     * @throws IOException 异常
     */
    void batchDownloadPba(HttpServletResponse response, ArrayList<Long> ids) throws IOException;

    /**
     * 血站退血申请分页
     *
     * @param currentPage      当前页面
     * @param pageSize         当前页面大小
     * @param bloodInformation 血液信息实体类
     * @return 分页结果
     */
    IPage<BloodInformation> getPageBi(int currentPage, int pageSize, BloodInformation bloodInformation);

    /**
     * 根据编号批量删除
     *
     * @param ids 待删除数据的编号
     * @return 返回是否成功删除
     */
    boolean deleteBatch(ArrayList<Long> ids);

    // *************************************zy*************************end

    // *************************************ysl********************start

    List<BloodInformation> getBloodByBloodInformation(BloodInformation bloodInformation);


    // *************************************ysl********************end

}
